import CryptoJS from 'crypto-js';

/**
 * @author csw
 * @description:前端利用AES对称性加密算法实现记住密码，加密存储浏览器本地便于用户登录同一浏览器自动回写密码
 * @date 2020-10-30 10:00:55
 */
// 默认的 KEY 与 iv 如果没有给
const key = CryptoJS.enc.Utf8.parse('1234123412ABCDEFABCDEF1234123412');  // 规定32位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse('ABCDEFABCDEF1234123412ABCDEF1234');   // 规定32位十六进制数作为密钥偏移量

export class CryptoPassWord {
    /**
     * AES加密,返回base64
     * @param word：
     */
    public static enCrypt(word: any): string {
        const srcs = CryptoJS.enc.Utf8.parse(word);
        const encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
        return encrypted.ciphertext.toString().toUpperCase();
    }

    /**
     * 解密,返回base64模式
     * @param word：
     */
    public static Decrypt(word: any): string {
        const encryptedHexStr = CryptoJS.enc.Hex.parse(word);
        const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
        const decrypt = CryptoJS.AES.decrypt(srcs, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
        const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
        return decryptedStr.toString();
    }

}

